Conventional enterprise computing systems include disparate logical components, each of which is implemented by a combination of hardware and software. A system designer initially configures this hardware and software based upon available resources and estimated system requirements. For example, an initial system configuration may specify a number of virtual machines allotted to application servers and a number of processes per application server.
Over a system's lifecycle, it may become desirable to change the initial system configuration. For example, the initial system configuration may not be suitable to address certain changes in customer requirements (e.g., number of system users) or system loads (e.g., resulting in low available memory). In order to address these changes, conventional systems rely on manual intervention by a system operator. Specifically, the operator may detect changes (e.g., via system alerts or customer complaints) and react by changing the system configuration. Some conventional systems provide limited automatic reactive intervention, for example, by increasing available memory in response to detecting a low memory situation.
Systems are desired to efficiently facilitate the adaptation of enterprise system resources. Such systems may operate reactively as well as proactively, in contrast to those conventional systems described above.